package it.gestionedocumentale.spring.service;

import it.gestionedocumentale.hibernate.dao.DocumentoDAO;
import it.gestionedocumentale.hibernate.sessionfactory.HibernateSessionFactory;
import it.gestionedocumentale.model.Documento;
import it.gestionedocumentale.model.Utente;
import it.gestionedocumentale.struts.form.RicercaDocumentoForm;

import java.util.List;
import java.util.Set;

import org.hibernate.Transaction;

public class DocumentoServiceImpl implements DocumentoService {
	
	private DocumentoDAO documentoDao;
	
	public DocumentoDAO getDocumentoDao() {
		return documentoDao;
	}
	
	public void setDocumentoDao(DocumentoDAO documentoDao) {
		this.documentoDao = documentoDao;
	}
	

	@Override
	public void save(Documento transientInstance) throws Exception {
		
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		
		documentoDao.save(transientInstance);
		
		tx.commit();
	}

	@Override
	public void delete(Documento persistentInstance) throws Exception {
		
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		
		documentoDao.delete(persistentInstance);
		
		tx.commit();
		
	}

	@Override
	public Documento findById(Long idDocumento) throws Exception {
		
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		
		Documento documento = documentoDao.findById(idDocumento);
		
		tx.commit();
		
		return documento;
	}

	@Override
	public List<Documento> findByExample(Documento instance) throws Exception {
		
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		
		List<Documento> listaDocumenti = documentoDao.findByExample(instance);
		
		tx.commit();
		
		return listaDocumenti;
	}

	@Override
	public List<Documento> findAll() throws Exception {
		
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		
		List<Documento> documenti = documentoDao.findAll();
		
		tx.commit();
		
		return documenti.size() < 1 ? null : documenti;
	}
	
	@Override
	public Set<Documento> simpleSearch(Utente utente, String stringaDiRicerca) throws Exception {
		
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Set<Documento> results = documentoDao.simpleSearch(utente, stringaDiRicerca);
		tx.commit();
		return results;
		
	}
	
	@Override
	public Set<Documento> advancedSearch(Utente utente, RicercaDocumentoForm form) throws Exception {
		
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Set<Documento> results = documentoDao.advancedSearch(utente, form);
		tx.commit();
		return results;
		
	}

}
